/**
 * 
 */
package mblog.core.persist.dao;

import java.util.Collection;
import java.util.List;

import mtons.modules.persist.Dao;
import mtons.modules.pojos.Page;

import org.hibernate.Session;

import com.faxsun.core.persist.entity.PostPO;
import com.faxsun.core.pojos.enums.PostType;

/**
 * @author langhsu
 *
 */
public interface PostDao extends Dao<PostPO> {
	Session getSession();
	/**
	 * 列出所有给定类型的文章，暂不考虑已删除
	 * @param page
	 * @param type
	 * @return
	 */
	List<PostPO> paging(Page page,PostType type);
	List<PostPO> pagingByUserId(Page page, long userId);
	List<PostPO> findRecents(int maxResutls, long ignoreUserId);
    List<PostPO> findRecents(int maxResutls, long ignoreUserId, int postType);
	List<PostPO> findHots(int maxResutls, long ignoreUserId);
	List<PostPO> findByIds(Collection<Long> ids);
	
	/**
	 * 查询所有打上给定tag的文章
	 * @param page
	 * @param tags
	 * @param type
	 * @return
	 */
	List<PostPO> findByTags(Page page,List<String> tags,PostType type);
    
    /**
     * 查询最近所有打上给定tag的文章
     * @param maxResutls
     * @param ignoreUserId
     * @param postType
     * @param tags
     * @return
     */
    List<PostPO> findRecentByTags(int maxResutls, long ignoreUserId, int postType, List<String> tags);
    
    /**
     * 查询最近所有打上给定tag的文章数量
     * @param ignoreUserId
     * @param postType
     * @param tags
     * @return
     */
    int countRecentByTags(long ignoreUserId, int postType, List<String> tags);
    
	/**
	 * 查询浏览量排在top的文章
	 * @param maxResutls
	 * @param type
	 * @return
	 */
	List<PostPO> findHots(int maxResutls, PostType type);
	
	/**
	 * 按状态读取文章
	 * @param page
	 * @param type
	 * @param status
	 * @return
	 */
	List<PostPO> pageingByStatus(Page page,PostType type,int status);
	
	/**
	 * 按用户和文章状态查询属于指定用户的文章
	 * @param page
	 * @param userId
	 * @param status
	 * @return
	 */
	List<PostPO> pagingByUserId(Page page, long userId,int status);
}
